/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 *       Filename:  dsc.c
 *    Description:  Модель дискретного симметричного канала связи
 *                  с заданной переходной вероятностью.
 *
 *        Version:  1.0
 *        Created:  10.02.2013 22:15:58
 *         Author:  Aleksey Golovchenko (lexgolovchenko@gmail.com)
 *   Organization:  St.Petersburg State Polytecnical Universisy
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#include <stdlib.h>
#include <time.h>
#include <stdio.h>

/* 
 * Геренация равномерно распределенных чисел в диапазоне [0,1]
 */
#define RANDU ((double)rand()/RAND_MAX)

/*
 * Моделирование передачи пакета через ДСК с вероятностью битовой ошибки p
 */
void bsc(void *frame, unsigned int len, double p)
{
    int i, j, err_cntr;
    unsigned char *buf = frame;
    unsigned char err;

    fprintf(stderr, "ERR vec : ");
    
    err_cntr = 0;
    for (i=0; i<len; ++i) {
        err = 0;
        for (j=0; j<8; ++j) {
            if (RANDU < p) {
                err |= (1<<j);            
                ++err_cntr;
            }
            fprintf(stderr, "%1d", (err & (1<<j))!=0);        
        }
        buf[i] ^= err;
    }
    
    fprintf(stderr, "\n");
    fprintf(stderr, "ERR CNTR = %d\n", err_cntr);
}

